#include "CubeMesh.h"

CubeMesh::CubeMesh(Eigen::Vector3f vec3Pos, float fSize, GTexture* pTexture)
{
	m_pTexture = pTexture;
	float fHalfSize = fSize / 2.0f;
	// top
	GenetateTrianglePlane(vec3Pos + Eigen::Vector3f(0, fHalfSize, 0), Eigen::Vector3f(fHalfSize, 0, 0), Eigen::Vector3f(0, 0, -fHalfSize));
	// bottom
	GenetateTrianglePlane(vec3Pos - Eigen::Vector3f(0, fHalfSize, 0), Eigen::Vector3f(-fHalfSize, 0, 0), Eigen::Vector3f(0, 0, fHalfSize));
	// left
	GenetateTrianglePlane(vec3Pos - Eigen::Vector3f(fHalfSize, 0, 0), Eigen::Vector3f(0, 0, -fHalfSize), Eigen::Vector3f(0, fHalfSize, 0));
	// right
	GenetateTrianglePlane(vec3Pos + Eigen::Vector3f(fHalfSize, 0, 0), Eigen::Vector3f(0, 0, fHalfSize), Eigen::Vector3f(0, -fHalfSize, 0));
	// near
	GenetateTrianglePlane(vec3Pos + Eigen::Vector3f(0, 0, fHalfSize), Eigen::Vector3f(fHalfSize, 0, 0), Eigen::Vector3f(0, fHalfSize, 0));
	// far
	GenetateTrianglePlane(vec3Pos - Eigen::Vector3f(0, 0, fHalfSize), Eigen::Vector3f(-fHalfSize, 0, 0), Eigen::Vector3f(0, -fHalfSize, 0));
}

Eigen::Vector4f CubeMesh::ToVector4(Eigen::Vector3f vec3)
{
	return Eigen::Vector4f(vec3.x(), vec3.y(), vec3.z(), 1.0f);
}

void CubeMesh::GenetateTrianglePlane(Eigen::Vector3f vec3Center, Eigen::Vector3f vec3Hori, Eigen::Vector3f vec3Vertical)
{
	GTriangle* pTri1 = new GTriangle();
	pTri1->pTexture = m_pTexture;
	pTri1->vertices[0] = ToVector4(vec3Center - vec3Hori + vec3Vertical);
	pTri1->tex_coords[0] = Eigen::Vector4f(0, 1, 0, 0);
	pTri1->vertices[1] = ToVector4(vec3Center + vec3Hori + vec3Vertical);
	pTri1->tex_coords[1] = Eigen::Vector4f(1, 1, 0, 0);
	pTri1->vertices[2] = ToVector4(vec3Center + vec3Hori - vec3Vertical);
	pTri1->tex_coords[2] = Eigen::Vector4f(1, 0, 0, 0);


	GTriangle* pTri2 = new GTriangle();
	pTri2->pTexture = m_pTexture;
	pTri2->vertices[0] = ToVector4(vec3Center - vec3Hori + vec3Vertical);
	pTri2->tex_coords[0] = Eigen::Vector4f(0, 1, 0, 0);
	pTri2->vertices[1] = ToVector4(vec3Center - vec3Hori - vec3Vertical);
	pTri2->tex_coords[1] = Eigen::Vector4f(0, 0, 0, 0);
	pTri2->vertices[2] = ToVector4(vec3Center + vec3Hori - vec3Vertical);
	pTri2->tex_coords[2] = Eigen::Vector4f(1, 0, 0, 0);

	m_lstTriangle.push_back(pTri1);
	m_lstTriangle.push_back(pTri2);
}